﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsolePratice
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteTxt();
            WriteTxt();
            Console.ReadKey();
        }


        public static void WriteTest()
        {
            // Write sample data to CSV file
            using (CsvFileWriter writer = new CsvFileWriter("D:\\2014雨思佳春装新款数据包.csv"))
            {
                for (int i = 0; i < 100; i++)
                {
                    CsvRow row = new CsvRow();
                    for (int j = 0; j < 5; j++)
                        row.Add(String.Format("Column{0}", j));
                    writer.WriteRow(row);
                }
            }
        }

        public static void ReadTest()
        {
            // Read sample data from CSV file
            using (CsvFileReader reader = new CsvFileReader("D:\\2014雨思佳春装新款数据包.csv"))
            {
                CsvRow row = new CsvRow();
                while (reader.ReadRow(row))
                {
                    foreach (string s in row)
                    {
                        Console.Write(s);
                        Console.Write(" ");
                    }
                    Console.WriteLine();
                }
            }
        }


        public static void Reg()
        {
            #region 字符转义
            //1. \a 与报警(Bell)符 \u0007匹配  
            //Regex reg = new Regex("\a");
            //Console.WriteLine(@"\a:"+"\t"+reg.Match("Error!\u0007"));

            //2. \b 在字符类中，与退格键\u0008匹配
            //Regex reg = new Regex("[\b]{3,}");
            // Console.WriteLine(@"[\b]{3,}:" + "\t" + reg.Match("\b\b\b\b"));

            //3. \t 在字符类中，与制表符\u0009匹配
            //Regex reg = new Regex(@"(\w+)\t");
            //MatchCollection mat = reg.Matches("item1\titem2\t");

            //4. \r 在字符类中，与回车符\u000D匹配
            //Regex reg = new Regex(@"\r\n(\w+)");
            //MatchCollection mat = reg.Matches("\r\nThese are\ntwo lines.");
            //Print(mat);

            //5. \v 在字符类中，与垂直制表符\u000B匹配


            //6. \f 在字符类中，与换页符\u000C匹配

            //7. \n 在字符类中，与换行符\u000A匹配

            //8. \e 在字符类中，与转义符\u001B匹配

            //9. \ 使用八进制表示形式指定一个字符（nnn 由二到三位数字组成）
            //Regex reg = new Regex(@"\w\040\w");
            //MatchCollection mat = reg.Matches("a bc d");
            //Print(mat);

            //10. \x 使用16进制表示形式指定一个字符（nn 恰好由两位数字组成）
            //Regex reg = new Regex(@"\w\020\w");
            //MatchCollection mat = reg.Matches("a bc d");
            //Print(mat);

            //11. \ 在后面带有不识别不主题的此表和其他表中的转义字符时，与该字符匹配.例如\* 与 \x2A 相同 \.与\x2E相同
            //Regex reg = new Regex(@"a\.b");
            //MatchCollection mat = reg.Matches("cba.b.ca.bc");
            //Print(mat);
            #endregion

            #region 字符集
            //1. [character_group] 匹配character_group中任何单个字符.

            //2. [^character_group] 与不在character_group中的任何单个字符匹配

            //3. [first-last] 字符范围：与从first到last的范围中的任何单个字符匹配

            //4.  . 通配符:与除\n 之外的任何单个字符匹配。

            //5. \p{name} 与name制定的Unicode通用类别或命名块中的任何单个单词匹配 
            //Regex reg = new Regex(@"\p{Lu}");
            //MatchCollection mat = reg.Matches("City Lights");
            //Print(mat);

            //6. \w 与任何单词字符匹配。

            //7. \W 与任何非单词字符匹配

            //8. \s 与任何空白字符匹配

            //9. \S 与任何非空白字符匹配

            //10. \d 与任何十进制数字匹配

            //11. \D 匹配不是10进制数的任意字符
            #endregion


            #region 定位点
            //1. ^ 匹配必须从字符串或一行的开头开始

            //2. $ 匹配必须出现在字符串的末尾或出现在行或字符串末尾的\n之前

            //3. \A 匹配必须出现在字符串的开头
            //Regex reg = new Regex(@"\Aabc");
            //MatchCollection mat = reg.Matches("abcde. bcasdf abcef");
            //Print(mat);

            //4. \Z 匹配必须出现在字符串的末尾或出现在字符串末尾的\n之前

            //5. \z 匹配必须出现在字符串的末尾

            //6. \G 匹配必须出现在上一个匹配结束的地方
            //Regex reg = new Regex(@"\G\(\d\)");
            //MatchCollection mat = reg.Matches("(1)(3)(5)[7](9)");
            //Print(mat);

            //7. \b 匹配必须出现在\w(字母数字) 和 \W (非字母数字)字符之间的边界上
            //Regex reg = new Regex(@"\b\w+\s\w+\b");
            //MatchCollection mat = reg.Matches("them theme them them");
            //Print(mat);

            //8. \B 匹配不得出现在\b边界上
            //Regex reg = new Regex(@"\Bend\w*\b");
            //MatchCollection mat = reg.Matches("end sends endure lender");
            //Print(mat);
            #endregion


            #region 分组构造
            //string pattern = "^[^<>]*" +
            //           "(" +
            //           "((?'Open'<)[^<>]*)+" +
            //           "((?'Close-Open'>)[^<>]*)+" +
            //           ")*" +
            //           "(?(Open)(?!))$";
            String pattern = "^[^<>]*(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*(?(Open)(?!))$";
            string input = "<abc><mno<xyz>>";

            Match m = Regex.Match(input, pattern);
            if (m.Success == true)
            {
                Console.WriteLine("Pattern:" + pattern);
                Console.WriteLine("Input: \"{0}\" \nMatch: \"{1}\"", input, m);
                int grpCtr = 0;
                foreach (Group grp in m.Groups)
                {
                    Console.WriteLine("   Group {0}: {1}", grpCtr, grp.Value);
                    grpCtr++;
                    int capCtr = 0;
                    foreach (Capture cap in grp.Captures)
                    {
                        Console.WriteLine("      Capture {0}: {1}", capCtr, cap.Value);
                        capCtr++;
                    }
                }
            }
            else
            {
                Console.WriteLine("Match failed.");
            }

            #endregion
        }


        public static void Print(MatchCollection mat)
        {
            //foreach 遍历
            foreach (Match m in mat)　　　//Match类表示单个正则表达式匹配操作的结果
            {
                Console.WriteLine(m.Value);
            }
            Console.WriteLine("------------结束------------");
        }


        public static void WriteTxt()
        {
            try
            {
                FileStream fs = new FileStream(@"D:\aaa\data.txt", System.IO.FileMode.OpenOrCreate | FileMode.Append);
                StreamWriter sWriter = new StreamWriter(fs);
                sWriter.WriteLine("aaaaaa!");
                sWriter.Close();
                fs.Close();
            }
            catch (Exception)
            { 
            }
        }
    }
}
